#pragma once
#include<stdint.h>
#include<stdio.h>
#include<time.h>

// 定义一个主机的基本信息
struct host_info{
    // 构造函数，参数初始化
    host_info(uint32_t ip, int port, int init_succ){
        this->ip = ip;
        this->port = port;
        
        vsucc = init_succ;
        verr = 0;
        
        rsucc = 0;
        rerr = 0;

        contin_succ = 0;
        contin_err = 0;

        overload = false;

        overload_ts = time(NULL);
        idle_ts = time(NULL);
    }

    // 设置一个host为ovreload
    void set_overload(int init_err){
        vsucc = 0;
        verr = init_err;

        rsucc = 0;
        rerr = 0;

        contin_succ = 0;
        contin_err = 0;

        overload = true;

        overload_ts = time(NULL);

    }
    // 设置一个host为idle
    void set_idle(int init_succ){
        vsucc = init_succ;
        verr = 0;
        
        rsucc = 0;
        rerr = 0;

        contin_succ = 0;
        contin_err = 0;

        overload = false;

        idle_ts = time(NULL);
    }

    
    uint32_t ip;            // ip信息
    int port;               // port信息

    uint32_t vsucc;         // 虚拟成功次数(API反馈)，用于过载或者空闲的判断
    uint32_t verr;          // 虚拟失败次数

    uint32_t rsucc;         // 真实成功次数，用来上报的
    uint32_t rerr;          // 真实失败次数

    uint32_t contin_succ;   // 连续的成功次数
    uint32_t contin_err;    // 连续的失败次数

    bool overload;          // 当前状态是否过载

    long idle_ts;           // 当host成为idle的时间
    long overload_ts;       // 当host成为overload的时间

};